package com.springsecurity.beans;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.springsecurity.dao.impl.EventoDAO;
import com.springsecurity.dao.impl.FotoDAO;
import com.springsecurity.entities.Evento;
import com.springsecurity.entities.Fotos;


@Controller
@Scope("request")
	public class GaleriaBean {
	 
	    private List<Evento> eventos = new ArrayList<Evento>();
	    private Evento evento = new Evento();
	    private Evento eventoSelecionado = new Evento();
	    private EventoDAO eventoDAO = new EventoDAO();
	    private FotoDAO fotoDAO = new FotoDAO();
	    private Fotos foto = new Fotos();
	    private StreamedContent imagem = new DefaultStreamedContent();
	    private List<Fotos> fotos = new ArrayList<Fotos>();
	 
	    /* getters e setters */	    
	 
	    public void setFoto(Fotos foto) {
	        this.foto = foto;
	    }
	 
	    public List<Evento> getEventos() {
			return eventos;
		}

		public void setEventos(List<Evento> eventos) {
			this.eventos = eventos;
		}

		public Evento getEvento() {
			return evento;
		}

		public void setEvento(Evento evento) {
			this.evento = evento;
		}

		public Evento getEventoSelecionado() {
			return eventoSelecionado;
		}

		public void setEventoSelecionado(Evento eventoSelecionado) {
			this.eventoSelecionado = eventoSelecionado;
		}

		public EventoDAO getEventoDAO() {
			return eventoDAO;
		}

		public void setEventoDAO(EventoDAO eventoDAO) {
			this.eventoDAO = eventoDAO;
		}

		public FotoDAO getFotoDAO() {
			return fotoDAO;
		}

		public void setFotoDAO(FotoDAO fotoDAO) {
			this.fotoDAO = fotoDAO;
		}

		public StreamedContent getImagem() {
			return imagem;
		}

		public void setImagem(StreamedContent imagem) {
			this.imagem = imagem;
		}

		public List<Fotos> getFotos() {
			return fotos;
		}

		public void setFotos(List<Fotos> fotos) {
			this.fotos = fotos;
		}

		public Fotos getFoto() {
			return foto;
		}

		public void salvaEvento() {
	        eventoDAO.salva(evento);
			evento = new Evento();
			eventos = eventoDAO.listaTodos();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Evento adicionado", "Evento adicionado"));
	    }
	 
	    public void salvaFotos() {
	        fotoDAO.salva(foto);
			foto = new Fotos();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Foto adicionada", "Foto adicionada"));
	 
	    }
	 
	    public void enviaImagem(FileUploadEvent event) {
	        try {
	            imagem = new DefaultStreamedContent(event.getFile().getInputstream());
	            foto.setEvento(eventoSelecionado);
	            foto.setImagem(event.getFile().getContents());
	        } catch (IOException ex) {
	            Logger.getLogger(GaleriaBean.class.getName()).log(Level.SEVERE, null, ex);
	        }
	    }
	 
	    public void criaArquivo(byte[] bytes, String arquivo) {
	        FileOutputStream fos;
	        try {
	            fos = new FileOutputStream(arquivo);
	            fos.write(bytes);
	            fos.close();
	        } catch (FileNotFoundException ex) {
	            Logger.getLogger(GaleriaBean.class.getName()).log(Level.SEVERE, null, ex);
	        } catch (IOException ex) {
	            Logger.getLogger(GaleriaBean.class.getName()).log(Level.SEVERE, null, ex);
	        }
	    }
	 
	    public void listaFotosEvento() {
	        fotos = fotoDAO.buscaPorEvento(eventoSelecionado);
			for (Fotos f : fotos) {
			    FacesContext facesContext = FacesContext.getCurrentInstance();
			    ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();
			    String nomeArquivo = f.getId().toString() + ".jpg";
			    String arquivo = scontext.getRealPath("/temp/" + nomeArquivo);
			    criaArquivo(f.getImagem(), arquivo);
			}
	    }
	 
	    public GaleriaBean() {
	        eventos = eventoDAO.listaTodos();
	    }
	    
	    public String site()
	    {
	    	return "galeria";
	    }
	}

